package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.dto.SysIdleBoatInfoDto;
import com.ruoyi.common.core.domain.entity.system.SysBoat;
import com.ruoyi.common.enums.BoatStatus;

import java.util.List;
import java.util.Map;


/**
 * 船只信息Service接口
 *
 * @author zjw
 * @date 2023-06-21
 */
public interface ISysBoatService {
    /**
     * 查询船只信息
     *
     * @param boatId 船只id
     * @return 船只信息
     */
    public SysBoat selectSysBoatByBoatId(Long boatId);

    /**
     * 查询船只信息
     *
     * @param boatIdentityId 船只出厂ID
     * @return 船只信息
     */
    public SysBoat selectSysBoatByBoatIdentityId(String boatIdentityId);

    /**
     * 查询船只信息列表
     *
     * @param sysBoat 船只信息
     * @return 船只信息集合
     */
    public List<SysBoat> selectSysBoatList(SysBoat sysBoat);

    /**
     * 新增船只信息
     *
     * @param sysBoat 船只信息
     * @return 结果
     */
    public int insertSysBoat(SysBoat sysBoat);

    /**
     * 修改船只信息
     *
     * @param sysBoat 船只信息
     * @return 结果
     */
    int updateSysBoat(SysBoat sysBoat);

    /**
     * 更新船只的位置及方位信息。
     *
     * @param lon
     * @param lat
     * @param orientation
     */
    void updateBoatLocationInfo(Long boatId, Double lon, Double lat, Integer orientation);

    /**
     * 更新船只状态。
     *
     * @param boatId     船只id
     * @param boatStatus 船只状态枚举类。船只状态可取的值：（0=离线,1=维护,2=空闲,3=拼团中,4=上船倒计时中,5=开锁等待中,6=手动驾驶中,7=自动驾驶中。）
     * @return
     */
    int updateBoatStatusByBoadId(Long boatId, BoatStatus boatStatus);

    /**
     * 批量删除船只信息
     *
     * @param boatIds 需要删除的船只信息主键集合
     * @return 结果
     */
    public int deleteSysBoatByBoatIds(Long[] boatIds);

    /**
     * 删除船只信息信息
     *
     * @param boatId 船只信息主键
     * @return 结果
     */
    public int deleteSysBoatByBoatId(Long boatId);

    List<SysIdleBoatInfoDto> selectAllIdleSysBoat(Long scenicId, Long wharfId);

    List<Map<String, Object>> getAllIdleAndGroupbookingBoatList(Long scenicId, Long wharfId, Long pintuanId);

    List<SysBoat> getBoatListByScenicId(Long scenicId);

    /**
     * 更新所有景区下的所有船只状态。
     *
     * @param offline
     */
    void updateAllBoatStatus(BoatStatus offline);

}
